package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISocDispatchEmpAddDAO;
import org.jsola.hr.dto.SocDispatchEmpAddAddDTO;
import org.jsola.hr.dto.SocDispatchEmpAddAndItemUpdateDTO;
import org.jsola.hr.dto.SocDispatchEmpAddUpdateDTO;
import org.jsola.hr.dto.excel.SocDispatchEmpAddImportDTO;
import org.jsola.hr.entity.SocDispatchEmpAddDO;
import org.jsola.hr.query.SocDispatchEmpAddQuery;
import org.jsola.hr.vo.SocDispatchEmpAddListVO;
import org.jsola.hr.vo.SocDispatchEmpAddVO;
import org.jsola.hr.vo.SocDispatchVO;
import org.jsola.user.core.TokenUser;

import java.util.List;
import java.util.Map;


/**
 * 社保派单员工表_增员
 *
 * @author zhr
 */
public interface ISocDispatchEmpAddService extends IService<ISocDispatchEmpAddDAO, SocDispatchEmpAddDO> {

    /**
     * 新增社保派单员工表_增员
     *
     * @param socDispatchEmpAddAddDTO 新增社保派单员工表_增员DTO
     * @param tokenUser               当前用户
     * @return 社保派单员工表_增员详情信息
     */
    SocDispatchEmpAddVO save(SocDispatchEmpAddAddDTO socDispatchEmpAddAddDTO, TokenUser tokenUser);

    /**
     * 批量新增社保派单员工表_增员
     *
     * @param companyId                      公司id
     * @param socDispatchEmpAddImportDTOList 新增社保派单员工表_增员DTO
     * @param socDispatchId                  派单记录id
     * @param isUpdate                       新增还是修改,true:修改
     * @param year                           派单年月,例:2020
     * @param month                          派单年月,例:05
     * @param headMap                        表头
     * @param tokenUser                      当前用户
     * @return 社保派单员工表_增员详情信息
     */
    SocDispatchVO batchSave(String companyId, String socDispatchId, boolean isUpdate, List<SocDispatchEmpAddImportDTO> socDispatchEmpAddImportDTOList, String year, String month, Map<Integer, String> headMap, TokenUser tokenUser);

    /**
     * 修改社保派单员工表_增员
     *
     * @param socDispatchEmpAddUpdateDTO 修改社保派单员工表_增员DTO
     * @param tokenUser                  当前用户
     * @return 更新数量
     */
    int update(SocDispatchEmpAddUpdateDTO socDispatchEmpAddUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除社保派单员工表_增员，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser            当前用户
     * @param socDispatchEmpAddIds 社保派单员工表_增员id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... socDispatchEmpAddIds);

    /**
     * 根据社保派单员工表_增员id查找
     *
     * @param socDispatchEmpAddId 社保派单员工表_增员id
     * @param siteId              所属站点id
     * @return 社保派单员工表_增员详情信息
     */
    SocDispatchEmpAddVO selectById(String socDispatchEmpAddId, String siteId);

    /**
     * 查询社保派单员工表_增员
     *
     * @param socDispatchEmpAddQuery 查询条件
     * @param siteId                 所属站点id
     * @return 社保派单员工表_增员列表信息
     */
    List<SocDispatchEmpAddListVO> select(SocDispatchEmpAddQuery socDispatchEmpAddQuery, String siteId);

    /**
     * 查询社保派单员工表_增员记录数
     *
     * @param socDispatchEmpAddQuery 查询条件
     * @param siteId                 所属站点id
     * @return 社保派单员工表_增员记录数
     */
    int selectCount(SocDispatchEmpAddQuery socDispatchEmpAddQuery, String siteId);

    /**
     * 分页查询社保派单员工表_增员
     *
     * @param socDispatchEmpAddQuery 查询条件
     * @param siteId                 所属站点id
     * @return 社保派单员工表_增员列表信息
     */
    Page<SocDispatchEmpAddListVO> selectPage(SocDispatchEmpAddQuery socDispatchEmpAddQuery, String siteId);


    /**
     * 根据社保派单员工表_增员id查找
     *
     * @param socDispatchEmpAddId 社保派单员工表_增员id
     * @param siteId              所属站点id
     * @return 社保派单员工表_增员
     */
    SocDispatchEmpAddDO selectDOById(String socDispatchEmpAddId, String siteId);

    /**
     * 查询社保派单员工表_增员
     *
     * @param socDispatchEmpAddQuery 查询条件
     * @param siteId                 所属站点id
     * @return 社保派单员工表_增员列表
     */
    List<SocDispatchEmpAddDO> selectDO(SocDispatchEmpAddQuery socDispatchEmpAddQuery, String siteId);

    /**
     * 获取某次导入记录的员工
     *
     * @param socDispatchId 导入记录id
     * @param siteId        站点
     * @return 导入记录的员工参保信息
     */
    List<SocDispatchEmpAddDO> listBySocDispatchId(String socDispatchId, String siteId);


    /**
     * 修改参保信息及参保子项
     *
     * @param empAndItemUpdateDTO 参保信息
     * @param tokenUser           当前用户
     * @return 修改数量
     */
    int updateEmpAndItem(SocDispatchEmpAddAndItemUpdateDTO empAndItemUpdateDTO, TokenUser tokenUser);

    /**
     * 根据导入记录删除
     *
     * @param socDispatchIds 导入记录id
     * @param siteId         站点
     */
    void deleteBySocDispatchId(String siteId, String... socDispatchIds);

    /**
     * 导入记录的员工
     *
     * @param socDispatchIds 导入记录id
     * @param siteId         站点
     * @return 导入记录的员工
     */
    List<SocDispatchEmpAddDO> listBySocDispatchIds(String siteId, String... socDispatchIds);

    /**
     * 根据id获取员工
     *
     * @param ids    id
     * @param siteId 站点
     * @return 员工
     */
    List<SocDispatchEmpAddDO> listByIds(String siteId, String... ids);

    /**
     * 将某次导入记录的员工派单
     *
     * @param socDispatchId 导入记录id
     * @param siteId        站点
     */
    void sendBySocDispatchId(String socDispatchId, String siteId);

}


